/**
 ******************************************************************************
 * @file    
 * @author 
 * @Version 
 * @Date    
 * @brief 
 *******************************************************************************  
 **/
#include "zb32l03x_hal.h"
#include "bsp_beep.h"
#include "app_beep.h"
static beep_t Beep;		/* 定义蜂鸣器全局结构体变量 */
/**
  * @brief  按键硬件初始化
  * @param  
  * @param  
  * @retval NUll
  */
void app_beep_init(void)
{
  bsp_beep_init();
   Beep.enalbe=0;
   Beep.state=0;
   Beep.beeptime=0;
   Beep.stoptime=0;
   Beep.cycle=0;
   Beep.count=0;
   Beep.cyclecount=0;
   Beep.mute=0;		/* 1表示静音 */	
}



/*
*********************************************************************************************************
*	函 数 名: app_beep_Start
*	功能说明: 启动蜂鸣音。
*	形    参: beeptime : 蜂鸣时间，单位10ms; 0 表示不鸣叫
*			  stoptime : 停止时间，单位10ms; 0 表示持续鸣叫
*			  cycle : 鸣叫次数， 0 表示持续鸣叫
*	返 回 值: 无
*********************************************************************************************************
*/
void app_beep_start(uint16_t beeptime, uint16_t stoptime, uint16_t cycle)
{
	if (beeptime == 0 || Beep.mute == 1)
	{
		return;
	}

	Beep.beeptime = beeptime;
	Beep.stoptime = stoptime;
	Beep.cycle = cycle;
	Beep.count = 0;
	Beep.cyclecount = 0;
	Beep.state = 0;
	Beep.enalbe = 1;	/* 设置完全局参数后再使能发声标志 */

	
	bsp_beep_open();
	/* 开始发声 */
}

/*
*********************************************************************************************************
*	函 数 名: app_beep_Stop
*	功能说明: 停止蜂鸣音。
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void app_beep_stop(void)
{
	Beep.enalbe = 0;

	if ((Beep.stoptime == 0) || (Beep.cycle == 0))
	{
    bsp_beep_close();
	}
}

/*
*********************************************************************************************************
*	函 数 名: app_beep_Pause
*	功能说明: 临时屏蔽蜂鸣音。通过 app_beep_Resume 恢复
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void app_beep_pause(void)
{
	app_beep_stop();
	
	Beep.mute = 1;		/* 静音 */
}

/*
*********************************************************************************************************
*	函 数 名: app_beep_MuteReversal
*	功能说明: 如果是静音，则关闭静音标志
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void app_beep_mutereversal(void)
{
	if(Beep.mute)
	{
      Beep.mute = 0;
	}
			
}

/*
*********************************************************************************************************
*	函 数 名: app_beep_Resume
*	功能说明: 恢复蜂鸣器正常功能
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void app_beep_resume(void)
{

	Beep.enalbe = 0;
	Beep.state = 0;
	Beep.beeptime = 0;
	Beep.stoptime = 0;
	Beep.cycle = 0;
	Beep.count = 0;
	Beep.cyclecount = 0;
	Beep.mute = 0; /* 静音 */
}

/*
*********************************************************************************************************
*	函 数 名: app_beep_KeyTone
*	功能说明: 发送按键音
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void app_beep_keytone(void)
{
	app_beep_start(5,1, 1);	/* 鸣叫50ms，停10ms， 1次 */
}

/*
*********************************************************************************************************
*	函 数 名: app_beep_KeyTone
*	功能说明: 发送按键音
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void app_beep_powerontone(void)
{
	app_beep_start(20,1, 1);	/* 鸣叫50ms，停10ms， 1次 */
}

/*
*********************************************************************************************************
*	函 数 名: app_beep_SuccessTone_1
*	功能说明: 成功声音
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void app_beep_successtone_1(void)
{
	app_beep_start(30, 4, 1);	/* 鸣叫300ms，停40ms， 1次 */
}
/*
*********************************************************************************************************
*	函 数 名: app_beep_SuccessTone_2
*	功能说明: 成功声音
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void app_beep_successtone_2(void)
{
	app_beep_start(30, 4, 2);	/* 鸣叫300ms，停40ms， 2次 */
}
/*
*********************************************************************************************************
*	函 数 名: app_beep_Error
*	功能说明: 故障声音
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void app_beep_errortone(void)
{
	app_beep_start(10, 10, 3);	/* 鸣叫100ms，停100ms， 3次 */
}
/*
*********************************************************************************************************
*	函 数 名: app_beep_Pro
*	功能说明: 每隔10ms调用1次该函数，用于控制蜂鸣器发声。
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void app_beep_pro(void)
{
	if ((Beep.enalbe == 0) || (Beep.stoptime == 0) || (Beep.mute == 1))
	{
		return;
	}

	if (Beep.state == 0)
	{
		if (Beep.stoptime > 0)	/* 间断发声 */
		{
			if (++Beep.count >= Beep.beeptime)
			{
				 bsp_beep_close();		/* 停止发声 */
				Beep.count = 0;
				Beep.state = 1;
			}
		}
		else
		{
			;	/* 不做任何处理，连续发声 */
		}
	}
	else if (Beep.state == 1)
	{
		if (++Beep.count >= Beep.stoptime)
		{
			/* 连续发声时，直到调用stop停止为止 */
			if (Beep.cycle > 0)
			{
				if (++Beep.cyclecount >= Beep.cycle)
				{
					/* 循环次数到，停止发声 */
					Beep.enalbe = 0;
				}

				if (Beep.enalbe == 0)
				{
					Beep.stoptime = 0;
					return;
				}
			}

			Beep.count = 0;
			Beep.state = 0;
		
			bsp_beep_open();			/* 开始发声 */
		}
	}
}
